package pl.icn.hurtownia.dao;

import java.math.BigDecimal;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import pl.icn.hurtownia.encje.Produkt;
import pl.icn.hurtownia.utils.HibernateUtil;

/**
 * DAO dla produktów 
 */
public class ProduktDAO {

	public static Long nowyProdukt(String kod, String nazwa, BigDecimal cena, int vat) {
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = null;
		Long produktID = null;
		
		try {
			tx = session.beginTransaction();
			Produkt produkt = new Produkt(kod, nazwa, cena, vat, null, null);
			produktID = (Long) session.save(produkt); 
			tx.commit();
		} catch (HibernateException e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace(); 
		} finally {
			session.close(); 
		}
		
		return produktID;
	}
	
	public static Produkt daneProduktu(Long produktID) {
		
		Session session = HibernateUtil.getSessionFactory().openSession();
	    Transaction tx = null;
	    Produkt produkt = null;
	    
	    try {
	    	tx = session.beginTransaction();
	        produkt = (Produkt) session.get(Produkt.class, produktID); 
	        tx.commit();
	    } catch (HibernateException e) {
	    	if (tx != null) {
	    		tx.rollback();
	        }
	        e.printStackTrace(); 
	    } finally {
	    	session.close(); 
	    }
	    
	    return produkt;
	}
	
	public static void edycjaProduktu(Long produktID, String kod, String nazwa, BigDecimal cena, Integer vat) {
		
		Session session = HibernateUtil.getSessionFactory().openSession();
	    Transaction tx = null;
	    
	    try {
	    	tx = session.beginTransaction();
	    	Produkt produkt = (Produkt) session.get(Produkt.class, produktID);
	    	if (kod != null) {
	    		produkt.setKod(kod);
	    	}
	    	if (nazwa != null) {
	    		produkt.setNazwa(nazwa);
		    }
	    	if (cena != null) {
	    		produkt.setCena(cena);
	    	}
	    	if (vat != null) {
	    		produkt.setVat(vat);
	    	}
	    	session.merge(produkt); 
	    	tx.commit();
    	} catch (HibernateException e) {
    		if (tx != null) {
    			tx.rollback();
    		}
    		e.printStackTrace(); 
    	} finally {
    		session.close(); 
    	}
	}
	
	public static void edycjaProduktu(Produkt produkt) {
		
		Session session = HibernateUtil.getSessionFactory().openSession();
	    Transaction tx = null;
	    
	    try {
	    	tx = session.beginTransaction();
	    	session.merge(produkt); 
	    	tx.commit();
    	} catch (HibernateException e) {
    		if (tx != null) {
    			tx.rollback();
    		}
    		e.printStackTrace(); 
    	} finally {
    		session.close(); 
    	}
	}
	
	public static void usuniecieProduktu(Long produktID){
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = null;
		
		try {
			tx = session.beginTransaction();
			Produkt produkt = (Produkt) session.get(Produkt.class, produktID); 
			session.delete(produkt); 
			tx.commit();
		} catch (HibernateException e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace(); 
		} finally {
			session.close(); 
		}
	}
	
}
